package com.limetalks.util;

import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class Thumbnail2 {
	
	public static void main(String[] args) throws Exception {
		//new Thumbnail2().createThumbnail("C:/img1.jpg", "C:/thumb.jpg", 50, 30);
		//new Thumbnail2().createThumbnail("http://fc04.deviantart.net/fs71/i/2011/326/d/4/sketchpage_commission_luckygirlxx_by_razuri_chan-d4gzps8.jpg", "C:/thumb.jpg", 50, 30);
	}
	
	public void createThumbnail(Image fromImage,String thumbPath,int thumbWidth,int thumbHeight) throws Exception{
	
		Image image = fromImage;//Toolkit.getDefaultToolkit().getImage(new URL(imgFilePath));
		//Image image = Toolkit.getDefaultToolkit().getImage(imgFilePath);
		MediaTracker mediaTracker = new MediaTracker(new Container());
		mediaTracker.addImage(image, 0);
		mediaTracker.waitForID(0);
		
		double thumbRatio = (double)thumbWidth / (double)thumbHeight;
		int imageWidth = image.getWidth(null);
		int imageHeight = image.getHeight(null);
		double imageRatio = (double)imageWidth / (double)imageHeight;
		
		if (thumbRatio < imageRatio) {
			thumbHeight = (int)(thumbWidth / imageRatio);
		} else {
			thumbWidth = (int)(thumbHeight * imageRatio);
		}
		
		BufferedImage thumbImage = new BufferedImage(thumbWidth,
		thumbHeight, BufferedImage.TYPE_INT_RGB);
		Graphics2D graphics2D = thumbImage.createGraphics();
		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
		RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
		
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(thumbPath));
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		JPEGEncodeParam param = encoder.
		getDefaultJPEGEncodeParam(thumbImage);
		
		int quality = 100;
		param.setQuality((float)quality / 100.0f, false);
		encoder.setJPEGEncodeParam(param);
		encoder.encode(thumbImage);
		out.close(); 
	}
}
